import 'dart:async';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_play_android/utils/route_util.dart';
import 'package:share/share.dart';
import 'package:webview_flutter/webview_flutter.dart';

/// WebView 加载网页页面
class WebViewScreen extends StatefulWidget {
  /// 标题
  final String? title;

  /// 链接
  final String url;

  const WebViewScreen({Key? key, this.title, required this.url})
      : super(key: key);

  @override
  State<StatefulWidget> createState() {
    // return WebViewScreenState();
    return _WebViewScreenState();
  }
}

class _WebViewScreenState extends State<WebViewScreen> {
  final Completer<WebViewController> _controller = Completer();

  double progress = 0.0;

  @override
  void initState() {
    super.initState();
    if (Platform.isAndroid) {
      WebView.platform = SurfaceAndroidWebView();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 0.4,
        title: Text(widget.title ?? ''),
        bottom: PreferredSize(
          child: SizedBox(
            height: 2,
            child: Builder(builder: (context) {
              return progress < 1
                  ? LinearProgressIndicator(
                      value: progress,
                    )
                  : Container();
            }),
          ),
          preferredSize: const Size.fromHeight(2),
        ),
        actions: <Widget>[
          IconButton(
            // tooltip: '用浏览器打开',
            icon: const Icon(Icons.language, size: 20.0),
            onPressed: () {
              RouteUtil.launchInBrowser(widget.url, title: widget.title);
            },
          ),
          IconButton(
            // tooltip: '分享',
            icon: const Icon(Icons.share, size: 20.0),
            onPressed: () {
              Share.share('${widget.title} : ${widget.url}');
            },
          ),
        ],
      ),
      body: WebView(
        initialUrl: widget.url,
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller.complete(webViewController);
        },
        onProgress: (progress) {
          setState(() {
            this.progress = progress / 100;
          });
          // print('WebView is loading (progress : $progress%)');
        },
        javascriptChannels: <JavascriptChannel>{
          _toasterJavascriptChannel(context)
        },
        onPageStarted: (String url) {
          print('Page started loading: $url');
        },
        onPageFinished: (String url) {
          print('Page finished loading: $url');
        },
        gestureNavigationEnabled: true,
      ),
    );
  }

  JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
    return JavascriptChannel(
        name: 'Toaster',
        onMessageReceived: (JavascriptMessage message) {
          // ignore: deprecated_member_use
          Scaffold.of(context).showSnackBar(
            SnackBar(content: Text(message.message)),
          );
        });
  }
}
// class WebViewScreenState extends State<WebViewScreen> {
//   bool isLoad = true;
//
//   final flutterWebViewPlugin = FlutterWebviewPlugin();
//
//   @override
//   void initState() {
//     super.initState();
//     flutterWebViewPlugin.onStateChanged.listen((state) {
//       if (state.type == WebViewState.finishLoad) {
//         setState(() {
//           isLoad = false;
//         });
//       } else if (state.type == WebViewState.startLoad) {
//         setState(() {
//           isLoad = true;
//         });
//       }
//     });
//     // flutterWebViewPlugin.launch(widget.url);
//   }
//
// //  void _onPopSelected(String value) {
// //    String _title = widget.title;
// //    switch (value) {
// //      case "browser":
// //        RouteUtil.launchInBrowser(widget.url, title: _title);
// //        break;
// //      case "share":
// //        String _url = widget.url;
// //        Share.share('$_title : $_url');
// //        break;
// //      default:
// //        break;
// //    }
// //  }
//
//   @override
//   Widget build(BuildContext context) {
//     return WebviewScaffold(
//       url: widget.url,
//       appBar: AppBar(
//         elevation: 0.4,
//         title: Text(widget.title ?? ''),
//         bottom: PreferredSize(
//           child: SizedBox(
//             height: 2,
//             child: Builder(builder: (context) {
//               return const LinearProgressIndicator();
//             }),
//           ),
//           preferredSize: const Size.fromHeight(2),
//         ),
//         actions: <Widget>[
//           IconButton(
//             // tooltip: '用浏览器打开',
//             icon: const Icon(Icons.language, size: 20.0),
//             onPressed: () {
//               // RouteUtil.launchInBrowser(widget.url, title: widget.title);
//             },
//           ),
//           IconButton(
//             // tooltip: '分享',
//             icon: const Icon(Icons.share, size: 20.0),
//             onPressed: () {
//               Share.share('${widget.title} : ${widget.url}');
//             },
//           ),
// //          new PopupMenuButton(
// //            padding: const EdgeInsets.all(0.0),
// //            onSelected: _onPopSelected,
// //            itemBuilder: (BuildContext context) => <PopupMenuItem<String>>[
// //              new PopupMenuItem<String>(
// //                  value: "browser",
// //                  child: ListTile(
// //                      contentPadding: EdgeInsets.all(0.0),
// //                      dense: false,
// //                      title: new Container(
// //                        alignment: Alignment.center,
// //                        child: new Row(
// //                          children: <Widget>[
// //                            Icon(
// //                              Icons.language,
// //                              color: Colours.gray_66,
// //                              size: 22.0,
// //                            ),
// //                            Gaps.hGap10,
// //                            Text('浏览器打开')
// //                          ],
// //                        ),
// //                      ))),
// //              new PopupMenuItem<String>(
// //                  value: "share",
// //                  child: ListTile(
// //                      contentPadding: EdgeInsets.all(0.0),
// //                      dense: false,
// //                      title: new Container(
// //                        alignment: Alignment.center,
// //                        child: new Row(
// //                          children: <Widget>[
// //                            Icon(
// //                              Icons.share,
// //                              color: Colours.gray_66,
// //                              size: 22.0,
// //                            ),
// //                            Gaps.hGap10,
// //                            Text('分享')
// //                          ],
// //                        ),
// //                      ))),
// //            ],
// //          )
//         ],
//       ),
//       withZoom: false,
//       withJavascript: true,
//       withLocalStorage: true,
//       // hidden: true,
//     );
//   }
//
//   @override
//   void dispose() {
//     flutterWebViewPlugin.dispose();
//     super.dispose();
//   }
// }
